package exercise.day13;
import java.util.*;

/**
 * @author Dianzhi Han
 * @version 1.0
 * @description: TODO
 * @date 2022/11/23 22:35
 */
public class WY28_JumpStonePane {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] step = new int[m+1];
        for (int i = 0; i < m + 1; i++) {
            step[i] = -1;  //初始化最小步数，没有此路径就是-1
        }
        step[n] = 0;
        for (int i = n; i <m+1; i++) {
            if(step[i]==-1){  //一定要加这个语句，不然别的路径会影响到这个步数，本来就不存在其他路径，如果要求的是到这个M的所有最小步数就不用加
                continue;
            }
            List<Integer> list = divisor(i); //找到当前元素的约数
            for(int j :list ){
                if(i+j<=m && step[i+j] == -1){  //若这个目标的路径还没人走过，那就只用把当前元素+1就行
                    step[i+j] = step[i]+1;
                }else if(i+j<=m){ //若这个目标的路径已经有人走过，判断和当前路径比哪个路径的步数最小
                    step[i+j] = Math.min(step[i+j],step[i]+1);
                }
            }
        }
        //到这里的时候已经全部都有最小路径数了
        if(step[m] == -1){
            System.out.println(-1);
        }else {
            System.out.println(step[m]);
        }
    }
    //传入一个整数，求出这个数的约数列表
    private static List<Integer> divisor(int n) {
        List<Integer> list =new ArrayList<>();
        for (int i = 2 ; i * i<=n ; i++){
            if (n%i == 0){
                list.add(i);
                if(n/i != i ){
                    list.add(n/i);
                }
            }
        }
        return list;
    }
}
